import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import store from '../vuex/store'
import { getToken } from './auth'
import config  from './config'


// axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
axios.defaults.headers['Content-Type'] ='application/json';
// axios.defaults.headers['Content-Type'] = axios.defaults.method ==="get"?'application/json':'application/x-www-form-urlencoded'

// 创建axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: config.api.path,
    // 超时
    timeout: config.api.timeout,
})

// request拦截器
service.interceptors.request.use(
    config => {
        if (getToken()) {
            config.headers['token'] =  getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
        }
        return config
    },
    error => {
        console.log(error)
        Promise.reject(error)
    }
)

// 响应拦截器
service.interceptors.response.use(res => {
        const code = res.status
        if (code === 401) {
            MessageBox.confirm(
                '登录状态已过期，您可以继续留在该页面，或者重新登录',
                '系统提示',
                {
                    confirmButtonText: '重新登录',
                    cancelButtonText: '取消',
                    type: 'warning'
                }
            ).then(() => {
                store.dispatch('LogOut').then(() => {
                    location.reload() // 为了重新实例化vue-router对象 避免bug
                })
            })
        } else if (code === 500) {
            console.info("have no permission!")
        } else if (code !== 200) {
            Notification.error({
                title: res.data.msg
            })
            return Promise.reject('error')
        } else {
            return res.data
        }
    },
    error => {
        console.log('err' + error)
        let errMsg=  error.response.data.message
        if (undefined !== errMsg && errMsg !== null && errMsg.indexOf("Subject does not have permission") != -1) {
            errMsg = "当前用户无操作权限：" + errMsg.replace("Subject does not have permission","");
        } else {
            errMsg =error.message;
        }
        Message({
            message: errMsg,
            type: 'error',
            duration: 5 * 1000
        });
        return Promise.reject(error)
    }
)

export default service
